﻿
namespace Library
{
    public delegate TResult FuncParams<in TParams, out TResult>(params TParams[] args);   
    public delegate TResult FuncParams<in T1, in TParams, out TResult>(T1 arg1, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in TParams, out TResult>(T1 arg1, T2 arg2, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, params TParams[] args);
    public delegate TResult FuncParams<in T1, in T2, in T3, in T4, in T5, in T6, in T7, in T8, in T9, in T10, in T11, in T12, in T13, in T14, in T15, in T16, in TParams, out TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16, params TParams[] args);
}
